/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package language;

import java.util.Iterator;
import java.util.LinkedList;

/**
 *
 * @author valerio
 */
public class SincroTripla {

    private NonTerminale nonTerminale;
    private LinkedList<Token> marcaApertura;
    private LinkedList<Token> marcaChiusura;

    public SincroTripla(NonTerminale nonTerminale) {
        this.nonTerminale = nonTerminale;
        marcaApertura = new LinkedList<Token>();
        marcaChiusura = new LinkedList<Token>();
    }

    public SincroTripla(NonTerminale nonTerminale, LinkedList<Token> marcaApertura, LinkedList<Token> marcaChiusura) {
        this.nonTerminale = nonTerminale;
        this.marcaApertura = marcaApertura;
        this.marcaChiusura = marcaChiusura;
    }

    public NonTerminale getNonTerminale() {
        return nonTerminale;
    }

    public LinkedList<Token> getMarcaApertura() {
        return marcaApertura;
    }

    public void setMarcaApertura(LinkedList<Token> marcaApertura) {
        this.marcaApertura = marcaApertura;
    }

    public LinkedList<Token> getMarcaChiusura() {
        return marcaChiusura;
    }

    public void setMarcaChiusura(LinkedList<Token> marcaChiusura) {
        this.marcaChiusura = marcaChiusura;
    }

    public LinkedList<ProduzioneErrore> creaProduzioni() {
        LinkedList<ProduzioneErrore> result = new LinkedList<>();
        Iterator<Token> it = marcaApertura.iterator();
        ErrorToken error = new ErrorToken();
        LinkedList<Element> parteDestra;
        Token t;
        while (it.hasNext()) {
            t = it.next();
            parteDestra = new LinkedList<>();
            parteDestra.add(t);
            parteDestra.add(error);
            result.add(new ProduzioneErrore(nonTerminale, parteDestra));
        }
        it = marcaChiusura.iterator();
        while (it.hasNext()) {
            t = it.next();
            parteDestra = new LinkedList<>();
            parteDestra.add(error);
            parteDestra.add(t);
            result.add(new ProduzioneErrore(nonTerminale, parteDestra));

        }
        return result;
    }
}
